package com.example.lt.controller;

import com.example.lt.context.BaseContext;
import com.example.lt.pojo.dto.AddCommentDTO;
import com.example.lt.pojo.dto.CommentDTO;
import com.example.lt.pojo.vo.CommentVO;
import com.example.lt.result.Result;
import com.example.lt.service.CommentService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author 小涛Tao
 * @Date: 2024/06/03/17:21
 * version 1.0 注释：
 **/
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/comment")
public class CommentController {

    private final CommentService commentService;

    /**
     * 管理端删除用户评论
     * @param id 评论id
     * @return
     */
    @GetMapping("/admin/delete")
    public Result adminDeleteComment(@RequestParam Integer id) {
        log.info("管理端删除用户评论：{}", id);
        return commentService.deleteComment(id, null);
    }

    /**
     * 添加用户评论
     * @param addCommentDTO
     * @return
     */
    @PostMapping("/user/add")
    public Result addComment(@RequestBody AddCommentDTO addCommentDTO) {
        // 把前端传过来的用户id改成token令牌中解析出来的用户id
        addCommentDTO.setUserId(BaseContext.getCurrentId());
        log.info("添加评论：{}",addCommentDTO);
        return commentService.addComment(addCommentDTO);
    }

    /**
     * 客户端用户删除用户评论
     * @param id 评论id
     * @return
     */
    @GetMapping("/user/delete")
    public Result deleteComment(@RequestParam Integer id) {
        Integer userId = BaseContext.getCurrentId();
        log.info("客户端用户删除用户评论：{}，{}", id, userId);
        return commentService.deleteComment(id,userId);
    }

    /**
     * 获取歌单的所有评论
     * @param songListId
     * @return
     */
    @GetMapping("/common/songList")
    public Result<List<CommentVO>> getSongListComment(@RequestParam Integer songListId) {
        log.info("获取歌单的所有评论：{}",songListId);
        List<CommentVO> songListComments = commentService.getSongOrListComment(songListId, null);
        return Result.success(songListComments);
    }

    /**
     * 获取歌曲的所有评论
     * @param songId
     * @return
     */
    @GetMapping("/common/song")
    public Result<List<CommentVO>> getSongComment(@RequestParam Integer songId) {
        log.info("获取歌曲的所有评论：{}",songId);
        List<CommentVO> songComments = commentService.getSongOrListComment(null, songId);
        return Result.success(songComments);
    }

    /**
     * 更新当前评论的总点赞数，这里只是提供了一个接口给前端，并没有前端调用这个方法
     * @param commentDTO
     * @return
     */
    @PostMapping("/user/like")
    public Result updateSupportCum(@RequestBody CommentDTO commentDTO) {
        log.info("更新当前评论的总点赞数：{}",commentDTO);
        return commentService.updateSupportCum(commentDTO);
    }

}
